/*********************************************************
 * 初学之家(http://www.g2room.com)，提供Java、Javascript（js）、Jquery、
 * 等一些工具或常用功能的实现例子代码，希望能给初学者提供学习和工作上的帮助，
 * 也希望有想提供源代码的朋友能联系我，一起努力，提供更多、更全面、更详细的
 * 一些初学代码例子及经验，帮助更多的人。
 * 
 * 我的联系方式：E-Mail：g2room@163.com
 * 网址：http://www.g2room.com
 * QQ：天涯（1173930590）
 * QQ交流群：323642758
 * 
 * 本站内容为提供各种java、javascript(JS)常用的工具源代码、实例（示例）、
 * 基本配置、教程、手册等；目前Java代码提供的工具（或转换）例子代码如下：
 * BASE64转换工具、bytes相关操作、email收发、文件操作（读写、拷贝、遍历、
 * 多线程copy等）、json格式转换、日志（Log4j）操作工具、Lucene搜索引擎的
 * 创建索引和搜索、各种不同Map的使用、定时器（Quartz）的使用例子、Socket的
 * 连接传输数据例子、WebService的例子及一些常用的工具类如String、Date及
 * JDK自带的一些工具类及函数的使用例子。
 * 
 * 说明：如需直接使用本站的例子代码，请保留此说明
 * 
 ********************************************************/
package com.g2room.myuall.timer;

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

/**
 * Quartz核心引擎类
 *
 * @createTime: Jun 21, 2013 5:00:50 PM
 * @author: <a href="mailto:g2room@163.com">天涯</a>
 * @version: 0.1
 * @lastVersion: 0.1
 * @updateTime:
 * @updateAuthor: <a href="mailto:g2room@163.com">天涯</a>
 * @changesSum:
 * 
 */
public class QuartzEngine {
	static String hour = "3";
	static String minute = "30";
	public static void main(String[] args) {
		hour = null != args && args.length>0 ? args[0] : "11";
		minute = null != args && args.length>1 ? args[1] : "57";
		try {
			QuartzEngine.jobSChedule();
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}

	/** Quartz任务调度工厂 */
	private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();

	/**
	 * 获取Quartz任务已经实例化了的调度工厂类
	 *
	 * @return {SchedulerFactory} 已经实例化后的调度工厂类
	 * @auther <a href="mailto:g2room@163.com">天涯</a> Jun 21, 2013 5:01:27 PM
	 */
	public static SchedulerFactory getSchedulerFactory() {
		return schedulerFactory;
	}

	/**
	 * 使用quartz实现的调度任务
	 *
	 * @throws SchedulerException
	 * @auther <a href="mailto:g2room@163.com">天涯</a> Jun 21, 2013 5:07:28 PM
	 */
	public static void jobSChedule() throws SchedulerException {
		System.out.println("进入任务调度！");
		// 从工厂里面拿到一个scheduler实例
		Scheduler scheduler = schedulerFactory.getScheduler();
		cronJob(scheduler);
		// 开始调度
		scheduler.start();
	}

	/**
	 * 简单调度实例，同一个Job可以注册到多个scheduler
	 *
	 * @param {Scheduler} scheduler Quartz的调度
	 * @throws SchedulerException
	 * @auther <a href="mailto:g2room@163.com">天涯</a> Jun 21, 2013 5:11:52 PM
	 */
	public static void cronJob(Scheduler scheduler) throws SchedulerException {
//		JobDetail job = JobBuilder.newJob(GrapArtiJob.class)
//				.withIdentity("publishJob", "publishGroup").build();
//		CronTrigger cronTrigger = TriggerBuilder.newTrigger()
//				.withIdentity("publishTrigger", "publishGroup")
//				.withSchedule(CronScheduleBuilder.cronSchedule("0 30 00 * * ?"))
//				.build();
//		scheduler.scheduleJob(job, cronTrigger);
//		// 开始调度
//		scheduler.start();
		String scheduleTime = "40 "+minute+" "+hour+" * * ?";
		System.out.println("定时时间：" + scheduleTime);
		JobDetail grapBbsJob = JobBuilder.newJob(GrapBbsJob.class)
				.withIdentity("publishJob", "publishGroup").build();
		CronTrigger grapBbsTrigger = TriggerBuilder.newTrigger()
				.withIdentity("publishTrigger", "publishGroup")
				.withSchedule(CronScheduleBuilder.cronSchedule(scheduleTime))
				.build();
		scheduler.scheduleJob(grapBbsJob, grapBbsTrigger);
		// 开始调度
		scheduler.start();
		
		// scheduler结束
//		scheduler.shutdown(true);
		System.out.println("==============" + scheduler.getMetaData().getNumberOfJobsExecuted());
	}
}
